Spring boot基础

[TOC]

1.Starter

1-1.概念

Spring boot的依赖项,所有spring boot整合的依赖都有此约定

  • 核心依赖org.springframework.boot中的整合都以 spring-boot-starter-xxx的形式引入
  • 第三方的依赖可能是以xxx-spring-boot-starter的形式引入

如spring-boot-starter 核心启动器,整合自动配置的支持以及日志记录和YAML
Spring-boot-starter-aop 支持spring 面向切面编程
……更多参考官网列表
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-starter

1-2.spring boot根据starter生成主观配置

Spring boot会根据配置的starter生成自己的主观配置,如导入spring-boot-starter-web时生成的观点

  • 使用Tomcat作为嵌入web服务容器
  • 使用Hibernation 对象关系映射(ORM)
  • 使用Apache Jackson绑定Json
  • 使用Spring MVC作为Rest风格框架

Spring boot会生成目前主流的web默认配置(¯(ツ)/¯),如果需要替换,可以自定义,方法下方传送门

2.可执行jar

可以通过maven插件配置打包,在本地命令窗口即可启动项目(简单实用的功能,省略)

精选传送门,附带整合Rest风格的Demo
https://www.ibm.com/developerworks/cn/java/j-spring-boot-basics-perry/index.html

3.Spring快速搭建

3-1.Demo01入门

该博客有一套基础的Spring boot搭建文章
https://www.cnblogs.com/ityouknow/p/5662753.html

4.常用注解整合

4-1.Controller层常用注解

@Controller
Spring中,表现层的控制器标识(servlet)

@RestController
在rest风格中常用的控制器标识,是组合注解,包括

  • @ResponseBody
  • @Controller
  • @Retention(value=RUNTIME)
  • @Documented
    SpringMVC中,该类的所有handler都会以字符串渲染的形式返回给调用者

@RequestMapping
扩展处理器映射器,被标注的方法即handler,可以标注对象,这也是springMVC的特点之一
属性:

  • value 地址/变量/正则表达式
  • method 方法格式,如 RequestMethod.GET
  • consumes 如 consumes=”application/json” 处理Content-Type的类型为指定类型的请求
  • produces 如 produces=”application/json” 处理请求的Accept为指定类型的请求,并返回相同的内容类型
  • params 如 params = “username=DonY15” 处理带有username参数,且值为DonY15的指定请求
  • headers 如 headers=”Referer=http://www.ifeng.com/“ 处理header中带有Referer且值为http://www.ifeng.com/的请求

不同属性的映射注解

  • @PathVariable 如 @PathVariable String username 接收地址栏中变量/正则的注解
  • @RequestParams 接收约定传递的参数

@ResponseBody
普通MVC中常用来返回json格式给前端,建议和json类型转换器搭配使用

@RequestBody
很少使用,限制请求参数来自请求体中

4-2.配置注解

@SpringBootApplication
启动类注解,组合注解,内部封装了三种注解,都需要时可以使用该注解来简化代码

  • @ComponentScan 扫描需要的组件
  • @Configuration 配置类
  • @EnableAutoConfiguration 开启自动配置

@Component
与Configuration类似,一般当组件配置不好分类时使用

@Autowired/@Resource
自动装配/指定注入

@Inject
等价于默认的@Autowired,只是没有required属性

@ImportResource
用来加载xml配置文件。

如Spring-xxx.xml可以注入

(技巧,可以先将多个Spring-xxx.xml通过@Import注入到一个Spring-root.xml中,再将Spring-root.xml注入到代码)

@Service
一般用于修饰service层的组件(不同框架有不同的作用,如Dubbo)

@Repository
使用@Repository注解可以确保DAO或者repositories提供异常转译,这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项。

@Bean
用@Bean标注方法等价于XML中配置的bean。

@Value
注入Spring boot application.properties配置的属性的值。

—————「待深入注解」—————
@JsonBackReference
解决嵌套外链问题

@RepositoryRestResourcepublic
配合spring-boot-starter-data-rest使用。

@Import
用来导入其他配置类

@Qualifier
当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定。与@Autowired配合使用。@Qualifier限定描述符除了能根据名字进行注入,但能进行更细粒度的控制如何选择候选者

4-3.全局异常注解

@ControllerAdvice
包含@Component。可以被扫描到。统一处理异常。

@ExceptionHandler(Exception.class)
用在方法上面表示遇到这个异常就执行以下方法。

4-4.事务管理

@EnableTransactionManagement
开始事务支持

@Transactional
Service中指定方法开启事物

多事务管理器传送门
https://blog.csdn.net/catoop/article/details/50595702
事务简单配置传送门
https://blog.csdn.net/rickiyeat/article/details/62042685

4-5.整合Mybatis

mybatis-spring-boot-starter
@MapperScan
扫描Mapper包

整合Mybatis传送门
http://www.ityouknow.com/springboot/2016/11/06/spring-boo-mybatis.html

4-6.JPA注解

@Entity
实体类注解

@Table
实体类和数据库表映射,如果两者名字相同可以省略

@Column
实体类属性和字段映射,如果两者名字相同可省略

@Id
主键映射

@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = “repair_seq”)
表示主键生成策略是sequence(可以为Auto、IDENTITY、native等,Auto表示可在多个数据库间切换),指定sequence的名字是repair_seq。

@JsonIgnore
作用是json序列化时将Java bean中的一些属性忽略掉,序列化和反序列化都受影响。

@JoinColumn(name=”loginId”)
一对一:本表中指向另一个表的外键。
一对多:另一个表指向本表的外键。

@OneToOne
@OneToMany
@ManyToOne
对应hibernate配置文件中的一对一,一对多,多对一。

—————「待深入注解」—————
@Transient:表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性。如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic。@Basic(fetch=FetchType.LAZY):标记可以指定实体属性的加载方式

5.Thymeleaf 丁香叶

SpringBoot官方不支持使用JSP,官方推荐 Thymeleaf 引擎代替JSP

Thymeleaf支持动静结合

5-1. 语法 th: 前缀

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<p th:text="${text}">我是普通文本</p>	

<p th:utext="${htmlText}">我是转义文本(标签)</p>

<p><a th:href="@{{ahref}?pa={text}(ahref=${ahref},text=${text})}">我是a标签</a></p>

我是表格<br/>
<table border="1">
<tr th:each="dept:${deptList}">
<td th:text="${dept.id}">id</td>
<td th:text="${dept.name}">name</td>
</tr>
</table>


我是下拉框
<select >
<option th:each="dept:${deptList}" th:value="${dept.id}" th:text="${dept.name}" th:selected="${dept.id}==${param.id[0]}"></option>
</select><br/>


<input th:value="${text}"> //value值

<script th:src="@{static/test.js}" type="text/javascript"></script>

<div th:if="${ahref == 'test'}">条件判断是否显示这段话</div>

Thymeleaf基础手册

https://blog.csdn.net/zrk1000/article/details/72667478/

后台可以使用Model

5-2.优秀传送门

https://www.bysocket.com/?p=1973

6.PageInfo的使用

传送门https://blog.csdn.net/csdn_huzeliang/article/details/79350425